#include <iostream>
using namespace std;
// 用 8 个二进制位表示 -11
// XM: 11110101

// 用 16 个二进制位表示 -11
// XM: 1111111111110101
// MM: 1111 1111 1111 0101

// 当表达负数的时候，高位补 1。

// 8 个二进制位
// 能表达的最大正数是？它的二进制是什么？
// 127,0b01111111
// 能表达的最小负数？它的二进制是什么？
// -128, 0b10000000

// 一个 char 表示一个字节，Byte，8 bits；
// 一个 short 表示两个字节，16 bits；
// 一个 int 表示 4 字节，32 bits；
// 一个 long 表示 8 字节，64 bits；
// 一个 long long 表示 16 个字节，128 bits;

int main(int argc, char const *argv[])
{
  /* code */

x 

  short x = m;
  x = x << 15;
  cout << x << endl; // x ?

  n = n << 16;
  cout << n << endl; // n ?

  // 0x12A4 -> 0b0001 0010 1010 0100

  // 15 -   0b00001111
  // x  -   0b01111000
  // y -    0b11110000
  
  // 0x33 - 0b00110011
  // 0x55 - 0b01010101

  // 在 C++ 里，打印一个 char 的时候，它的打印形式，和打印其他数字是不同的；
  // 至少调用循环次数次 min + 递归调用 f 的过程中调用的 min 的和
  for (int i = 1; i <= n; i++) {
    /*
    n = 2, m = 2
    
    i = 1, f(1, 2), f(0, 1) -> 总共调用了 1 次 min
    i = 2, f(0, 2), f(1, 1) -> 总共调用了 0 次 min

    n = 3, m = 2
    i = 1, f(1, 2), f(0, 1) -> 总共调用了 1 次 min
    i = 2, f(0, 2), f(1, 1) -> 总共调用了 0 次 min
    i = 3, f(0, 2), f(2, 1) ->
    */
    
    ret = min(ret, max(f(n - i, m), f(i - 1, m - 1)) + 1);
  }
  
  return 0;
}




